Avage Pandase GroupBy jõud andmeanalüüsis. See juhend uurib agregatsiooni ja transformatsiooni tehnikaid praktiliste näidetega rahvusvahelistele andmetele.
Pandase GroupBy operatsioonide valdamine: Agregatsioon vs Transformatsioon
Pandas, andmete manipuleerimise nurgakivi Pythonis, pakub võimsa tööriista andmete analüüsimiseks ja mõistmiseks: GroupBy operatsioon. See funktsioon võimaldab teil oma andmed jagada rühmadesse ühiste omaduste alusel ja seejärel rakendada nendele rühmadele funktsioone, mis paljastavad teadmisi, mis muidu jääksid varjatuks. See artikkel sukeldub sügavuti kahte peamisse GroupBy operatsiooni: agregatsioon ja transformatsioon, pakkudes praktilisi näiteid ja selgitusi, mis sobivad andmespetsialistidele kogu maailmas.
GroupBy kontseptsiooni mõistmine
Põhimõtteliselt on GroupBy protsess, mis hõlmab kolme peamist sammu: andmete jagamine rühmadesse ühe või mitme kriteeriumi alusel, funktsiooni rakendamine igale rühmale iseseisvalt ja tulemuste kombineerimine uueks andmestruktuuriks. See "jaga-rakenda-kombineeri" strateegia on andmeanalüüsi põhiline kontseptsioon ja pakub paindlikku raamistikku keerukate andmekogumite uurimiseks.
GroupBy jõud seisneb selle võimes käsitleda erinevaid andmetüüpe ja struktuure, muutes selle kohaldatavaks erinevates valdkondades. Olenemata sellest, kas analüüsite müügiandmeid mitmest piirkonnast, andureid erinevatelt seadmetelt või sotsiaalmeedia aktiivsust erinevatel demograafilistel näitajatel, võib GroupBy aidata teil ekstraktida sisukaid teadmisi.
Agregatsioon: Andmete kokkuvõtmine rühmades
Agregatsioon on iga rühma kohta kokkuvõtvate statistikate arvutamise protsess. Need statistikud annavad ülevaate rühma omadustest, võimaldades teil oma andmete erinevaid segmente võrrelda ja vastandada. Levinud agregatsioonifunktsioonide hulka kuuluvad:
sum(): arvutab väärtuste summa igas rühmas.mean(): arvutab keskmise väärtuse igas rühmas.median(): arvutab keskmise väärtuse igas rühmas.min(): leiab minimaalse väärtuse igas rühmas.max(): leiab maksimaalse väärtuse igas rühmas.count(): loeb mittetühjade väärtuste arvu igas rühmas.size(): tagastab iga rühma suuruse (sh tühjad väärtused).std(): arvutab standardhälbe igas rühmas.var(): arvutab dispersiooni igas rühmas.
Agregatsiooni praktilised näited
Vaatleme rahvusvahelise müügiandmete andmekogumit hüpoteetilise e-kaubanduse ettevõtte kohta. Andmed sisaldavad teavet tootjategooria, müügiriigi ja müügimahu kohta.
import pandas as pd
# Näidisandmed
data = {
'Category': ['Electronics', 'Clothing', 'Electronics', 'Clothing', 'Home Goods', 'Electronics', 'Clothing', 'Home Goods'],
'Country': ['USA', 'UK', 'Canada', 'USA', 'Germany', 'UK', 'Canada', 'Germany'],
'Sales': [100, 50, 75, 60, 80, 90, 45, 70]
}
df = pd.DataFrame(data)
print(df)
See annab väljundi:
Category Country Sales
0 Electronics USA 100
1 Clothing UK 50
2 Electronics Canada 75
3 Clothing USA 60
4 Home Goods Germany 80
5 Electronics UK 90
6 Clothing Canada 45
7 Home Goods Germany 70
Näide 1: Kogumüügi arvutamine kategooria kohta
Iga tootekategooria kogumüügi arvutamiseks saame kasutada meetodit groupby(), millele järgneb agregatsioonifunktsioon sum().
category_sales = df.groupby('Category')['Sales'].sum()
print(category_sales)
See annab väljundi:
Category
Clothing 155
Electronics 265
Home Goods 150
Name: Sales, dtype: int64
Näide 2: Keskmise müügi arvutamine riigi kohta
Samamoodi, et arvutada keskmine müük riigi kohta, saame kasutada agregatsioonifunktsiooni mean().
country_sales = df.groupby('Country')['Sales'].mean()
print(country_sales)
See annab väljundi:
Country
Canada 60.0
Germany 75.0
UK 70.0
USA 80.0
Name: Sales, dtype: float64
Näide 3: Mitme agregatsioonifunktsiooni kasutamine
Pandas võimaldab teil rakendada mitut agregatsioonifunktsiooni samaaegselt, kasutades meetodit agg(). See pakub rühma omaduste põhjalikku kokkuvõtet.
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', 'median', 'count'])
print(category_summary)
See annab väljundi:
sum mean median count
Category
Clothing 155 51.666667 50.0 3
Electronics 265 88.333333 90.0 3
Home Goods 150 75.000000 75.0 2
Näide 4: Kohandatud agregatsioonifunktsioonid
Võite määratleda ka oma kohandatud agregatsioonifunktsioonid, kasutades lambda väljendeid või nimetatud funktsioone. See võimaldab teil arvutada konkreetseid statistikaid, mis pole standardsetes agregatsioonifunktsioonides saadaval.
# Kohandatud funktsioon vahemiku (max - min) arvutamiseks
def custom_range(x):
return x.max() - x.min()
category_summary = df.groupby('Category')['Sales'].agg(['sum', 'mean', custom_range])
print(category_summary)
See annab väljundi:
sum mean custom_range
Category
Clothing 155 51.666667 15
Electronics 265 88.333333 25
Home Goods 150 75.000000 10
Transformatsioon: Andmete muutmine rühmades
Transformatsioon, teisest küljest, hõlmab andmete muutmist igas rühmas teatud arvutuse põhjal. Erinevalt agregatsioonist, mis tagastab iga rühma kohta kokkuvõtliku väärtuse, tagastab transformatsioon väärtuse iga rea kohta algses andmestikus, kuid väärtus arvutatakse selle rühma põhjal, kuhu see rida kuulub. Transformatsioonioperatsioonid säilitavad DataFrame'i algse indeksi ja kuju.
Transformatsiooni levinud kasutusjuhud hõlmavad:
- Andmete standardimine igas rühmas.
- Rea või protsentiili arvutamine igas rühmas.
- Puuduvate väärtuste täitmine rühma statistikute põhjal.
Transformatsiooni praktilised näited
Jätkame oma rahvusvaheliste müügiandmetega. Saame rakendada transformatsiooni, et teostada arvutusi, mis on seotud müüginumbritega igas riigis.
Näide 1: Müügiandmete standardimine igas riigis (Z-skoor)
Andmete standardimine hõlmab väärtuste teisendamist nii, et nende keskmine oleks 0 ja standardhälve 1. See on kasulik andmete võrdlemiseks erinevatel skaaladel ja jaotustel. Selle saavutamiseks saame kasutada meetodit transform() koos lambda väljendiga.
from scipy.stats import zscore
df['Sales_Zscore'] = df.groupby('Country')['Sales'].transform(zscore)
print(df)
See annab väljundi:
Category Country Sales Sales_Zscore
0 Electronics USA 100 1.000000
1 Clothing UK 50 -1.000000
2 Electronics Canada 75 1.000000
3 Clothing USA 60 -1.000000
4 Home Goods Germany 80 1.000000
5 Electronics UK 90 1.000000
6 Clothing Canada 45 -1.000000
7 Home Goods Germany 70 -1.000000
Veerg Sales_Zscore sisaldab nüüd standarditud müügiväärtusi iga riigi kohta. Üle 0 väärtused on üle selle riigi keskmise müügi ja alla 0 väärtused on alla keskmise.
Näide 2: Müügi järgu arvutamine igas kategoorias
Iga müügi järgu arvutamiseks oma kategoorias saame kasutada meetodit rank() funktsioonis transform().
df['Sales_Rank'] = df.groupby('Category')['Sales'].transform(lambda x: x.rank(method='dense'))
print(df)
See annab väljundi:
Category Country Sales Sales_Zscore Sales_Rank
0 Electronics USA 100 1.000000 3.0
1 Clothing UK 50 -1.000000 2.0
2 Electronics Canada 75 1.000000 1.0
3 Clothing USA 60 -1.000000 3.0
4 Home Goods Germany 80 1.000000 2.0
5 Electronics UK 90 1.000000 2.0
6 Clothing Canada 45 -1.000000 1.0
7 Home Goods Germany 70 -1.000000 1.0
Veerg Sales_Rank näitab iga müügi järku oma vastavas kategoorias. Argument method='dense' tagab, et järjestikused järgud määratakse ilma lünkadeta.
Näide 3: Puuduvate väärtuste täitmine rühma keskmise põhjal
Võtame müügiandmetes sisse mõned puuduvad väärtused ja seejärel täidame need iga riigi keskmise müügi põhjal.
import numpy as np
# Puuduvate väärtuste tutvustamine
df.loc[[0, 3], 'Sales'] = np.nan
print(df)
# Puuduvate väärtuste täitmine riigi keskmise põhjal
df['Sales_Filled'] = df['Sales'].fillna(df.groupby('Country')['Sales'].transform('mean'))
print(df)
Algne DataFrame puuduvate väärtustega näeks välja selline:
Category Country Sales Sales_Zscore Sales_Rank
0 Electronics USA NaN 1.000000 3.0
1 Clothing UK 50 -1.000000 2.0
2 Electronics Canada 75 1.000000 1.0
3 Clothing USA NaN -1.000000 3.0
4 Home Goods Germany 80 1.000000 2.0
5 Electronics UK 90 1.000000 2.0
6 Clothing Canada 45 -1.000000 1.0
7 Home Goods Germany 70 -1.000000 1.0
Ja pärast puuduvate väärtuste täitmist:
Category Country Sales Sales_Zscore Sales_Rank Sales_Filled
0 Electronics USA NaN 1.000000 3.0 NaN
1 Clothing UK 50 -1.000000 2.0 50.0
2 Electronics Canada 75 1.000000 1.0 75.0
3 Clothing USA NaN -1.000000 3.0 NaN
4 Home Goods Germany 80 1.000000 2.0 80.0
5 Electronics UK 90 1.000000 2.0 90.0
6 Clothing Canada 45 -1.000000 1.0 45.0
7 Home Goods Germany 70 -1.000000 1.0 70.0
Oluline märkus: Kuna USA kohta ei olnud olemas keskmist, on saadud väärtused veerus Sales_Filled NaN. Selliste erijuhtumite käsitlemine on usaldusväärse andmeanalüüsi jaoks ülioluline ja seda tuleks rakendamisel arvesse võtta.
Agregatsioon vs Transformatsioon: peamised erinevused
Kuigi nii agregatsioon kui ka transformatsioon on võimsad GroupBy operatsioonid, teenivad need erinevaid eesmärke ja neil on erinevad omadused:
- Väljundi kuju: Agregatsioon vähendab andmete suurust, tagastades ühe väärtuse iga rühma kohta. Transformatsioon säilitab algse andmesuuruse, tagastades muundatud väärtuse iga rea kohta.
- Eesmärk: Agregatsiooni kasutatakse andmete kokkuvõtmiseks ja ülevaate saamiseks rühma omadustest. Transformatsiooni kasutatakse andmete muutmiseks rühmades, sageli standardimiseks või normaliseerimiseks.
- Tagastusväärtus: Agregatsioon tagastab uue DataFrame'i või Seeria agregeeritud väärtustega. Transformatsioon tagastab Seeria muundatud väärtustega, mida saab seejärel lisada uue veeruna algsesse DataFrame'i.
Agregatsiooni ja transformatsiooni vahel valimine sõltub teie konkreetsetest analüütilistest eesmärkidest. Kui teil on vaja andmeid kokku võtta ja rühmi võrrelda, on agregatsioon õige valik. Kui teil on vaja andmeid muuta rühmades, säilitades samal ajal algse andmestruktuuri, on transformatsioon parem valik.
Täpsemad GroupBy tehnikad
Lisaks põhilihtsale agregatsioonile ja transformatsioonile pakub Pandas GroupBy mitmeid täpsemaid tehnikaid keerukama andmeanalüüsi jaoks.
Kohandatud funktsioonide rakendamine meetodiga apply()
Meetod apply() pakub kõige rohkem paindlikkust, võimaldades teil rakendada igale rühmale mis tahes kohandatud funktsiooni. See funktsioon võib teostada mis tahes toiminguid, sealhulgas agregatsiooni, transformatsiooni või isegi keerukamaid arvutusi.
def custom_function(group):
# Arvutage müügi summa iga kategooria kohta rühmas, ainult siis, kui rühmas on rohkem kui üks rida
if len(group) > 1:
group['Sales_Sum'] = group['Sales'].sum()
else:
group['Sales_Sum'] = 0 # Või mõni muu vaikeväärtus
return group
df_applied = df.groupby('Country').apply(custom_function)
print(df_applied)
Selles näites määratleme kohandatud funktsiooni, mis arvutab müügi summa igas rühmas (riigis). Meetod apply() rakendab seda funktsiooni igale rühmale, mille tulemusena on uus veerg, mis sisaldab selle rühma müügi summat.
Oluline märkus: Funktsioon apply võib olla arvutuslikult intensiivsem kui teised meetodid. Optimeerige oma koodi ja kaaluge alternatiivseid rakendusi, kui töötate tohutute andmekogumitega.
Grupeerimine mitme veeru järgi
Saate oma andmed grupeerida mitme veeru järgi, et luua täpsemaid segmente. See võimaldab teil andmeid analüüsida mitme omaduse ristumiskohas.
category_country_sales = df.groupby(['Category', 'Country'])['Sales'].sum()
print(category_country_sales)
See grupeerib andmed nii Category kui ka Country järgi, võimaldades teil arvutada iga kategooria kogumüüki igas riigis. See annab üksikasjalikuma ülevaate müügitulemustest erinevates piirkondades ja tootesarjades.
Rühmade läbimine iteratsiooni abil
Keerukama analüüsi jaoks saate rühmade läbimiseks kasutada tsüklit for. See võimaldab teil pääseda igale rühmale eraldi ligi ja teostada sellel kohandatud toiminguid.
for name, group in df.groupby('Category'):
print(f"Category: {name}")
print(group)
See läbib iga tootekategooria ja prindib vastavad andmed. See võib olla kasulik kohandatud analüüsi tegemiseks või iga kategooria kohta aruannete genereerimiseks.
Parimad tavad GroupBy kasutamisel
Et tagada GroupBy tõhus ja tulemuslik kasutamine, arvestage järgmiste parimate tavadega:
- Mõistke oma andmeid: Enne
GroupByrakendamist võtke aega, et oma andmeid mõista ja tuvastada asjakohased rühmituskriteeriumid ning agregatsiooni/transformatsiooni funktsioonid. - Valige õige operatsioon: Kaaluge hoolikalt, kas agregatsioon või transformatsioon on teie analüütiliste eesmärkide jaoks sobiv valik.
- Optimeerige jõudlust: Suurte andmekogumite puhul kaaluge oma koodi optimeerimist, kasutades vektoriseeritud toiminguid ja vältides tarbetuid silmuseid.
- Käsitsege puuduvaid väärtusi: Olge oma andmetes teadlik puuduvatest väärtustest ja käsitsege neid asjakohaselt, kasutades selliseid meetodeid nagu
fillna()võidropna(). - Dokumenteerige oma koodi: Dokumenteerige selgelt oma koodi, et selgitada iga
GroupByoperatsiooni eesmärki ja oma valikute põhjendust.
Järeldus
Pandas GroupBy on võimas tööriist andmeanalüüsiks, mis võimaldab teil andmeid segmenteerida, rakendada funktsioone igale rühmale ja ekstraktida väärtuslikke teadmisi. Agregatsiooni ja transformatsiooni tehnikate valdamisega saate avada oma andmete täieliku potentsiaali ja saada sügavamat arusaamist aluseks olevatest mustritest ja suundumustest. Olenemata sellest, kas analüüsite müügiandmeid, andurite näiteid või sotsiaalmeedia aktiivsust, võib GroupBy aidata teil teha andmepõhiseid otsuseid ja saavutada oma analüütilised eesmärgid. Omaks GroupBy jõud ja viige oma andmeanalüüsi oskused järgmisele tasemele.
See juhend on andnud põhjaliku ülevaate Pandase GroupBy operatsioonidest, keskendudes agregatsioonile vs Transformatsioonile. Kasutades neid tehnikaid rahvusvahelistel andmetel, suudavad andmeteadlased kogu maailmas eraldada olulisi äriteadmisi erinevatest andmekogumitest. Harjutage, katsetage ja kohandage neid tehnikaid oma konkreetsetele vajadustele, et kasutada Pandase kogu potentsiaali.